﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SIM.Geo.BL;
using SIM.Geo.BE;
using System.Data;
using Microsoft.Office.Interop.Excel;
using Excel = Microsoft.Office.Interop.Excel;
using System.IO;
using System.Configuration;

namespace MC.SMC.UI.Min
{
    public partial class frmLeyMuestras : PaginaBase
    {

        #region Eventos

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                hfFormatosPermitidos.Value = ConfigurationManager.AppSettings["formatoImportarPermitidos"];
                LaboratoriosListar();
                lblNavegacion.Text = "Geologia > Ley Muestras";
            }
        }

        protected void btnImportar_Click(object sender, EventArgs e)
        {
            if (gvLey.Rows.Count > 0)
            {

                var listado = new List<BEMuestraSondaje>();
                var oBLLey = new BLMuestraSondaje();

                foreach (GridViewRow row in gvLey.Rows)
                {
                    listado.Add(new BEMuestraSondaje
                    {
                        CodigoMuestraSondaje = row.Cells[0].Text,
                        ValorAg = string.IsNullOrEmpty(row.Cells[1].Text) || row.Cells[1].Text == "&nbsp;" ? -1 : Convert.ToDecimal(row.Cells[1].Text),
                        ValorPb = string.IsNullOrEmpty(row.Cells[2].Text) || row.Cells[1].Text == "&nbsp;" ? -1 : Convert.ToDecimal(row.Cells[2].Text),
                        ValorZn = string.IsNullOrEmpty(row.Cells[3].Text) || row.Cells[1].Text == "&nbsp;" ? -1 : Convert.ToDecimal(row.Cells[3].Text),
                        ValorCu = string.IsNullOrEmpty(row.Cells[4].Text) || row.Cells[1].Text == "&nbsp;" ? -1 : Convert.ToDecimal(row.Cells[4].Text),
                        ValorFe = string.IsNullOrEmpty(row.Cells[5].Text) || row.Cells[1].Text == "&nbsp;" ? -1 : Convert.ToDecimal(row.Cells[5].Text),
                        Observacion = txtObservaciones.Text
                    });
                }

                oBLLey.LeyMuestraActualizar(listado);

                MostrarMensaje("Se importaron las leyes correctamente");
            }
            else MostrarMensaje("No hay registros en la grilla para actualizar.");
        }

        protected void btnMostrarArchivo_Click(object sender, EventArgs e)
        {
            if (rblLaboratorios.SelectedIndex == -1)
            {
                MostrarMensaje("Seleccione un Laboratorio.");
                return;
            }
            Mostrar();
        }

        protected void bntSalir_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/default.aspx");
        }

        #endregion

        #region Metodos

        private System.Data.DataTable EstructuraData()
        {
            System.Data.DataTable dt = new System.Data.DataTable("Ley");
            dt.Columns.Add(new DataColumn("Muestra", typeof(string)));
            dt.Columns.Add(new DataColumn("ValorAg", typeof(string)));
            dt.Columns.Add(new DataColumn("ValorPb", typeof(string)));
            dt.Columns.Add(new DataColumn("ValorZn", typeof(string)));
            dt.Columns.Add(new DataColumn("ValorCu", typeof(string)));
            dt.Columns.Add(new DataColumn("ValorFe", typeof(string)));
            dt.Columns.Add(new DataColumn("Validacion", typeof(string)));
            dt.AcceptChanges();

            return dt;
        }

        private void LaboratoriosListar()
        {
            var oBLParametros = new BLParametros();
            var oListaParametros = oBLParametros.ParametrosListar(new BEParametros
            {
                CodigoTabla = Convert.ToInt32(Tablas.Laboratorios)
            });

            ControlDataBind(oListaParametros, rblLaboratorios, "CodigoParametro", "Descripcion");

            rblLaboratorios.SelectedValue = Laboratorios.Externo.ToString();
        }

        private void Mostrar()
        {
            gvLey.DataSource = null;
            gvLey.DataBind();

            if (hfFormatoValidado.Value == "0")
            {
                MostrarMensaje("Seleccione un archivo con el formato correcto.");
                return;
            }

            if (fuLaboratorio.HasFile)
            {
                FileInfo fiMuestra = new FileInfo(fuLaboratorio.FileName);

                string root = Server.MapPath(ConfigurationManager.AppSettings["rutaArchivosLeyes"]) + fuLaboratorio.FileName;
                if (File.Exists(root))
                    File.Delete(root);

                fuLaboratorio.SaveAs(root);

                Excel.Application app = new Application();
                Workbook workBook = app.Workbooks.Open(root, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                Worksheet workSheet = (Worksheet)workBook.ActiveSheet;

                System.Data.DataTable dt;
                dt = EstructuraData();

                try
                {
                    Int32 i = 0; //Indice Filas
                    Int32 j = 0; //Indice Columnas
                    Int32 n = 30000; //Nro. Filas
                    //Int32 m = 5; //Nro. Columnas

                    string Muestra = String.Empty;
                    string ValorAg = String.Empty;
                    string ValorPb = String.Empty;
                    string ValorZn = String.Empty;
                    string ValorCu = String.Empty;
                    string Validacion = String.Empty;

                    string tope = ConfigurationManager.AppSettings["finLecturaLey"];
                    string identificador = ConfigurationManager.AppSettings["identificadorLey"];
                    int inicioLecturaLey = Convert.ToInt32(ConfigurationManager.AppSettings["inicioLecturaLey"]);
                    int nroFilaIdentificador = Convert.ToInt32(ConfigurationManager.AppSettings["nroFilaIdentificador"]);

                    var _identificadorLecturaLinea = (string)workSheet.get_Range("A" + nroFilaIdentificador.ToString(), Type.Missing).Text;

                    if (_identificadorLecturaLinea.Trim().ToUpper() != identificador.Trim().ToUpper())
                    {
                        MostrarMensaje("Seleccione el libro correcto para la importacion de leyes.");
                        //Cerrar Objeto Excel
                        workBook.Close(false, null, null);
                        app.Quit();

                        //Eliminar Archivo Fisico
                        if (System.IO.File.Exists(root))
                           System.IO.File.Delete(root);
                        return;
                    }

                    for (i = inicioLecturaLey; i <= n; i++)
                    {
                        Muestra = (string)workSheet.get_Range("A" + i.ToString(), Type.Missing).Text;
                        ValorAg = (string)workSheet.get_Range("B" + i.ToString(), Type.Missing).Text;
                        ValorPb = (string)workSheet.get_Range("C" + i.ToString(), Type.Missing).Text;
                        ValorZn = (string)workSheet.get_Range("D" + i.ToString(), Type.Missing).Text;
                        ValorCu = (string)workSheet.get_Range("E" + i.ToString(), Type.Missing).Text;

                        if (Muestra.Equals(tope))
                        {
                            i = n;
                            break;
                        }
                        else
                        {
                            DataRow dr;
                            dr = dt.NewRow();
                            dr[0] = Muestra;
                            dr[1] = ValorAg.Replace('<', ' ');
                            dr[2] = ValorPb.Replace('<', ' ');
                            dr[3] = ValorZn.Replace('<', ' ');
                            dr[4] = ValorCu.Replace('<', ' ');
                            dr[5] = -1;
                            dt.Rows.Add(dr);
                            dt.AcceptChanges();
                        }
                    }

                    gvLey.DataSource = dt;
                    gvLey.DataBind();

                    //Cerrar Objeto Excel
                    workBook.Close(false, null, null);
                    app.Quit();

                    //Eliminar Archivo Fisico
                    if (System.IO.File.Exists(root))
                        System.IO.File.Delete(root);
                }
                catch (Exception ex)
                {
                    //Cerrar Objeto Excel
                    workBook.Close(false, null, null);
                    app.Quit();

                    //Eliminar Archivo Fisico
                    if (System.IO.File.Exists(root))
                        System.IO.File.Delete(root);

                    MostrarMensaje(ex.Message);
                }
            }
            else
            {
                MostrarMensaje("Seleccione un archivo para la carga.");
            }
        }

        #endregion

    }
}